package siac.com.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

import siac.com.dao.LocProvinciaDao;
import siac.com.entity.LocProvincia;
import siac.com.util.JsfUtil;


@ManagedBean
@SessionScoped
public class LocProvinciaController {
	private LocProvinciaDao dao;
	private LocProvincia infoBean;
	private ListDataModel<LocProvincia> listaProvincias;
	private String estadoCorrente;
	private String paginaDestino;
	private String tituloPagina;
	private String nome;

	public LocProvinciaController() {
		this.estadoCorrente = JsfUtil.ESTADO_PESQUISAR;
		this.tituloPagina = ResourceBundle.getBundle(
				"siac.com.idioma.mensagens_pt_PT").getString(
				"locProvinciaTituloListar");
		this.nome = "";
		this.infoBean = new LocProvincia();
		this.dao = new LocProvinciaDao();
		this.listaProvincias = new ListDataModel<LocProvincia>(this.dao.findAll());
		this.populatarLista();
	}

	private void populatarLista() {
		this.listaProvincias = new ListDataModel<LocProvincia>(this.dao.findAll());
	}

	// mÈtodos gets e sets

	/**
	 * Pesquisa usu·rios por nome
	 */
	public String pesquisarTodos() {
		this.setEstadoCorrente(JsfUtil.ESTADO_PESQUISAR);
		this.tituloPagina = ResourceBundle.getBundle(
				"siac.com.idioma.mensagens_pt_PT").getString(
				"locProvinciaTituloListar");
		this.populatarLista();
		return null;
	}

	public String pesquisarById(String id) {
		this.setEstadoCorrente(JsfUtil.ESTADO_PESQUISAR);
		this.tituloPagina = ResourceBundle.getBundle(
				"siac.com.idioma.mensagens_pt_PT").getString(
				"locProvinciaTituloListar");
		this.infoBean = this.dao.find(new Long(id));
		List<LocProvincia> aux = new ArrayList<LocProvincia>();
		aux.add(this.infoBean);
		this.listaProvincias = new ListDataModel<LocProvincia>(aux);
		return null;
	}

	public String pesquisar() {
		this.setEstadoCorrente(JsfUtil.ESTADO_PESQUISAR);
		this.tituloPagina = ResourceBundle.getBundle(
				"siac.com.idioma.mensagens_pt_PT").getString(
				"locProvinciaTituloListar");
		List<LocProvincia> aux = this.dao.findName(this.nome);
		this.listaProvincias = new ListDataModel<LocProvincia>(aux);
		return null;
	}

	/**
	 * Prepara view detalhe
	 */
	public String preparaDetalhes() {
		this.setEstadoCorrente(JsfUtil.ESTADO_DETALHES);
		this.tituloPagina = ResourceBundle.getBundle(
				"siac.com.idioma.mensagens_pt_PT").getString(
				"locProvinciaTituloDetalhes");
		return null;
	}

	public String novo() {
		this.infoBean = new LocProvincia();
		return "../edicao/crudLocProvincia.jsf";
	}

	/**
	 * Prepara view adicionar
	 */
	public String preparaAdicionar() {
		this.setEstadoCorrente(JsfUtil.ESTADO_ADICIONAR);
		this.tituloPagina = ResourceBundle.getBundle(
				"siac.com.idioma.mensagens_pt_PT").getString(
				"locProvinciaTituloRegistar");
		return novo();
	}

	/**
	 * Adiciona usuario
	 */
	public String adicionar() {
		try {
			Date dt = new Date();
			infoBean.setDataRegisto((Date)dt.clone());
			infoBean.setDataAlteracao((Date)dt.clone());
			infoBean.setOperadorRegisto(1L);
			infoBean.setOperadorAlteracao(1L);
			this.dao.create(infoBean);
			JsfUtil.addSuccessMessage(ResourceBundle.getBundle(
					"siac.com.idioma.mensagens_pt_PT").getString(
					"geralRegistoCriado"));
			return this.preparaAdicionar();
		} catch (Exception e) {
			JsfUtil.addErrorMessage(e,
					ResourceBundle.getBundle("siac.com.idioma.mensagens_pt_PT")
							.getString("geralErroDePersistencia"));
			return null;
		}
	}

	/**
	 * Prepara view editar
	 */
	public String preparaEditar() {
		this.setEstadoCorrente(JsfUtil.ESTADO_ACTUALIZAR);
		this.tituloPagina = ResourceBundle.getBundle(
				"siac.com.idioma.mensagens_pt_PT").getString(
				"locProvinciaTituloAlterar");
		return "../edicao/crudLocProvincia.jsf";
	}

	/**
	 * Edita usu·rio
	 */
	public String editar() {
		try {
			Date dt = new Date();
			infoBean.setDataAlteracao((Date)dt.clone());
			infoBean.setOperadorAlteracao(1L);
			this.dao.edit(infoBean);
			JsfUtil.addSuccessMessage(ResourceBundle.getBundle(
					"siac.com.idioma.mensagens_pt_PT").getString(
					"geralRegistoAlterado"));
			this.setEstadoCorrente(JsfUtil.ESTADO_FORMVAZIO);
			return null; //this.voltar();
		} catch (Exception e) {
			JsfUtil.addErrorMessage(e,
					ResourceBundle.getBundle("siac.com.idioma.mensagens_pt_PT")
							.getString("geralErroDePersistencia"));
			return null;
		}
	}

	/**
	 * Prepara view eliminar
	 */
	public String preparaEliminar() {
		this.setEstadoCorrente(JsfUtil.ESTADO_ELIMINAR);
		this.tituloPagina = ResourceBundle.getBundle(
				"siac.com.idioma.mensagens_pt_PT").getString(
				"locProvinciaTituloEliminar");
		return "../edicao/crudLocProvincia.jsf";
	}

	/**
	 * Exclui usuario
	 */
	public String eliminar() {
		try {
			this.dao.remove(infoBean);
			JsfUtil.addSuccessMessage(ResourceBundle.getBundle(
					"siac.com.idioma.mensagens_pt_PT").getString(
					"geralRegistoEliminado"));
			this.setEstadoCorrente(JsfUtil.ESTADO_FORMVAZIO);
			return null; //this.voltar();
		} catch (Exception e) {
			JsfUtil.addErrorMessage(e,
					ResourceBundle.getBundle("siac.com.idioma.mensagens_pt_PT")
							.getString("geralErroDePersistencia"));
			return null;
		}
	}

	/**
	 * Referente ao bot„o voltar
	 */
	public String voltar() {
		this.pesquisarTodos();
		return "../leitura/listaLocProvincia.jsf";
	}

	public SelectItem[] getItemsAvailableSelectMany() {
		return JsfUtil.getSelectItems(this.dao.findAll(), false);
	}

	public SelectItem[] getItemsAvailableSelectOne() {
		return JsfUtil.getSelectItems(this.dao.findAll(), true);
	}

	public SelectItem[] getItemsAvailableSelectOneByPais() {
		return JsfUtil.getSelectItems(this.dao.findByCodePais("AG"), true);
	}

	public SelectItem[] getItemsAvailableSelectOneEmpety() {
		List<LocProvincia> lista = new ArrayList<LocProvincia>();
		return JsfUtil.getSelectItems(lista, true);
	}

	/*
	 * MÈtodos que expıem o estado da pagina
	 */

	public boolean isEstadoPesquisar() {
		String state = this.getEstadoCorrente();
		return (state == null || JsfUtil.ESTADO_PESQUISAR.equals(state));
	}

	public boolean isEstadoAdicionar() {
		return JsfUtil.ESTADO_ADICIONAR.equals(this.getEstadoCorrente());
	}

	public boolean isEstadoActualizar() {
		return JsfUtil.ESTADO_ACTUALIZAR.equals(this.getEstadoCorrente());
	}

	public boolean isEstadoEliminar() {
		return JsfUtil.ESTADO_ELIMINAR.equals(this.getEstadoCorrente());
	}

	public boolean isEstadoDetalhe() {
		return JsfUtil.ESTADO_DETALHES.equals(this.getEstadoCorrente());
	}

	public boolean isEstadoCrud() {
		return (this.isEstadoAdicionar() || this.isEstadoActualizar()
				|| this.isEstadoEliminar() || this.isEstadoDetalhe());
	}

	public String getEstadoCorrente() {
		return estadoCorrente;
	}

	public void setEstadoCorrente(String estadoCorrente) {
		this.estadoCorrente = estadoCorrente;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public LocProvinciaDao getDao() {
		return dao;
	}

	public void setDao(LocProvinciaDao dao) {
		this.dao = dao;
	}

	public LocProvincia getInfoBean() {
		return infoBean;
	}

	public void setInfoBean(LocProvincia infoBean) {
		this.infoBean = infoBean;
	}

	public ListDataModel<LocProvincia> getListaProvincias() {
		return listaProvincias;
	}

	public void setListaProvincias(ListDataModel<LocProvincia> listaProvincias) {
		this.listaProvincias = listaProvincias;
	}

	public String getPaginaDestino() {
		return paginaDestino;
	}

	public void setPaginaDestino(String paginaDestino) {
		this.paginaDestino = paginaDestino;
	}

	public String getTituloPagina() {
		return tituloPagina;
	}

	public void setTituloPagina(String tituloPagina) {
		this.tituloPagina = tituloPagina;
	}

}  